package org.jerrymouse.jsa4j.db.kv;

import java.util.UUID;

/**
 * 主键生成器，使用UUID算法
 * 
 * @author yankai
 * 
 */
public class KeyMaker {
	/**
	 * 生成主键，理论上碰撞概率是很低的。需要提供前缀
	 * 
	 * @param prefix
	 *            前缀
	 * 
	 * @return 可以作为键使用。
	 */
	public static String make(String prefix) {
		return linkPrefix(prefix, digits(UUID.randomUUID()
				.getLeastSignificantBits(), 12));
	}

	/**
	 * 生成主键，理论上碰撞概率是很低的。不需要前缀
	 * 
	 * @return 为了足够简短，返回的是一个12位的String。可以作为键使用。
	 */
	public static String make() {
		return digits(UUID.randomUUID().getLeastSignificantBits(), 12);
	}

	/**
	 * 前缀链接
	 * 
	 * @param prefix
	 *            前缀
	 * @param value
	 *            需要链接的件
	 * @return 完成链接的键
	 */
	public static String linkPrefix(String prefix, String value) {
		return prefix + "-" + value;
	}

	private static String digits(long val, int digits) {
		long hi = 1L << (digits * 4);
		return Long.toHexString(hi | (val & (hi - 1))).substring(1);
	}

	public static String removePrefix(String prefix, String key) {
		if (key == null)
			return null;
		if (!key.startsWith(prefix))
			return null;
		return key.substring(prefix.length() + 1);
	}
}
